package modelo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public abstract class Prenda {
	protected String codigo;
	protected String nombre;
	protected List<MaterialPrenda> materiales;
	protected int stock;
	/** usados en la vista, en las tablas */
	protected boolean selected;
	protected int cantidad;
	
	public Prenda(String codigo, String nombre, int stock) {
		this.codigo = codigo;
		this.nombre = nombre;
		this.stock = stock;
		materiales = new ArrayList<MaterialPrenda>();
	}
	public abstract float precioVenta();
	
	public String getCodigo() {
		return codigo;
	}
	
	/**
	 * Se agregan a la prenda los materiales con su respectiva cantidad que la componen.
	 * @param materiales la clave es el codigo del material y el valor la cantidad utilizada en dicha prenda
	 */
	public void agregarMateriales(Map<Material, Integer> materiales) {
		this.materiales.clear();
		Iterator<Material> it = materiales.keySet().iterator();
		while(it.hasNext()){
		  Material material = it.next();
		  int cantidad = materiales.get(material);
		  this.materiales.add(new MaterialPrenda(cantidad, material));
		}
	}
	
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	public void bajarStock(int cantidad){
		this.stock -=  cantidad;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public List<MaterialPrenda> getMateriales() {
		return materiales;
	}

	public void setMateriales(List<MaterialPrenda> materiales) {
		this.materiales = materiales;
	}
	
	public int getStock() {
		return stock;
	}
	
	public void setStock(int stock) {
		this.stock = stock;
	}

	public boolean puedoVender(int cantidad) {
		return stock >= cantidad;
	}

	public boolean hasCodigo(String codigo) {
		return this.codigo.equals(codigo);
	}
	
	public int getCantidad() {
		return cantidad;
	}
	
	public boolean isSelected() {
		return selected;
	}
	
	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}
	
	public void setSelected(boolean selected) {
		this.selected = selected;
	}
}
